Machine Learning · PoliMI

Metodi Monte Carlo

Capitolo 12
≈ 50 min di lettura · 11007 parole
Importanza per l'esame: 4/5

★★★★☆ Presente in 12 prove su 25: 4 esercizi numerici first/every visit, sempre presente nei confronti MC vs TD e nei vero/falso su bias e varianza.

I capitoli precedenti hanno risolto i problemi di prediction (valutare una policy) e di control (trovare la policy ottima) in un MDP sotto un’ipotesi molto forte: la conoscenza completa del modello, cioè della dinamica one-step p(ss,a)p(s' \mid s, a) e della funzione di reward r(s,a)r(s, a). Con il modello in mano, la programmazione dinamica trova la policy ottima iterando le equazioni di Bellman. Questo capitolo rimuove quell’ipotesi e affronta la domanda che apre il reinforcement learning vero e proprio: che cosa si può fare quando il modello non c’è, oppure costruirlo è troppo difficile o costoso? La risposta dei metodi Monte Carlo è tanto semplice quanto potente: sostituire i valori attesi calcolati attraverso il modello con medie empiriche calcolate sull’esperienza, cioè su episodi completi di interazione con l’ambiente. Il percorso del capitolo parte dalla motivazione del model-free, sviluppa la Monte Carlo prediction (stimatori first-visit ed every-visit, aggiornamento incrementale della media), passa al control scoprendo che il vero ostacolo è l’esplorazione, introduce le soluzioni exploring starts e policy ε-greedy con il relativo teorema di improvement e la condizione GLIE, distingue apprendimento on-policy e off-policy con l’importance sampling, discute i limiti strutturali dei metodi Monte Carlo e chiude con esercizi numerici svolti nello stile tipico dell’esame.

Riferimenti sul testo: Sutton e Barto, Reinforcement Learning: An Introduction, capitolo 5. Materiale complementare consigliato: il corso online Sample-based Learning Methods (Coursera).

1. E se il modello non c’è? Dal planning all’apprendimento#

1.1 Il limite della programmazione dinamica#

Gli algoritmi di programmazione dinamica, come value iteration, aggiornano la value function con backup del tipo

V(s)maxaA(s)[r(s,a)+γsp(ss,a)V(s)]V(s) \leftarrow \max_{a \in \mathcal{A}(s)} \left[ r(s, a) + \gamma \sum_{s'} p(s' \mid s, a) \, V(s') \right]

Ogni singolo aggiornamento richiede di conoscere r(s,a)r(s, a) e p(ss,a)p(s' \mid s, a), cioè la dinamica one-step dell’MDP: sono esattamente i due ingredienti che le slide del corso evidenziano nella formula del backup.

I due ingredienti del modello. Il backup di value iteration usa in ogni aggiornamento il reward atteso r(s,a) e la dinamica p(s' \mid s, a): senza modello, nessuno dei due è disponibile. (Slide del corso.)

Le difficoltà di questo approccio sono di due nature. La prima è computazionale: anche con il modello disponibile, gli sweep su tutto lo spazio degli stati limitano la programmazione dinamica a problemi con al più qualche milione di stati (esistono mitigazioni, come la programmazione dinamica asincrona che aggiorna gli stati in ordine sparso e in parallelo, ma il costo resta proibitivo per spazi molto grandi). La seconda difficoltà è più radicale e riguarda la disponibilità stessa del modello: nella stragrande maggioranza dei problemi reali la dinamica one-step non è nota, e costruirne un modello accurato può essere estremamente complesso, dispendioso o semplicemente impossibile.

L’esempio del blackjack, sviluppato più avanti, è istruttivo: in linea di principio il gioco si potrebbe modellare analiticamente, calcolando la distribuzione congiunta di prossimo stato e reward per ogni situazione; in pratica scrivere quella distribuzione è un esercizio laborioso e soggetto a errori, mentre scrivere un simulatore che pesca carte e applica le regole è questione di poche righe di codice. Serve quindi una famiglia di metodi che non chieda il modello, ma si accontenti dei dati: metodi che imparino la policy ottima direttamente dall’esperienza.

Idea chiave: i metodi Monte Carlo sostituiscono la conoscenza del modello con l’esperienza: al posto dei valori attesi calcolati tramite p(ss,a)p(s' \mid s, a) usano medie empiriche di quantità osservate interagendo con l’ambiente (reale o simulato). Per la legge dei grandi numeri, con abbastanza esperienza la media converge al valore atteso.

In parole semplici: la programmazione dinamica è come calcolare la probabilità di vincere a un gioco leggendo il regolamento e facendo tutti i conti; Monte Carlo è come giocare tantissime partite e contare quante se ne vincono. Se il regolamento non ce l’ha nessuno, la seconda strada è l’unica percorribile.

1.2 Imparare dall’esperienza: episodi e return campionati#

L’esperienza da cui i metodi Monte Carlo imparano è costituita da episodi completi: sequenze di stati, azioni e reward osservati dall’inizio dell’interazione fino a uno stato terminale,

S0,A0,R1,S1,A1,R2,,ST1,AT1,RTS_0, A_0, R_1, S_1, A_1, R_2, \dots, S_{T-1}, A_{T-1}, R_T

Questi dati possono provenire da due sorgenti: dati reali, cioè tracce di interazione registrate su un problema fisico (per esempio i log di guida di un veicolo), oppure un simulatore, un programma capace di generare episodi a richiesta. In entrambi i casi non serve alcuna conoscenza esplicita della distribuzione p(s,rs,a)p(s', r \mid s, a). I metodi Monte Carlo si possono quindi usare in due modalità:

Programmazione dinamica (planning)modello: r, p, γbackup di Bellmanvalori attesi esattiVπ, π*Monte Carlo (learning)episodi: S0, A0, R1, …, RTmedia dei returnmedie empiricheVπ, π*

La materia prima dell’apprendimento è il return campionato: alla fine di ogni episodio, per ogni istante tt visitato, si può calcolare il return effettivamente realizzato Gt=Rt+1+γRt+2++γTt1RTG_t = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T-t-1} R_T. È un’osservazione, non un valore atteso: ogni episodio ne fornisce una realizzazione concreta. Da questa scelta discende però un vincolo strutturale: poiché il return si conosce solo quando l’episodio è terminato, i metodi Monte Carlo sono definiti solo per task episodici. Se l’interazione non termina mai, il return completo non è mai osservabile e l’idea non si applica (i metodi del prossimo capitolo rimuoveranno anche questo vincolo).

In parole semplici: Monte Carlo aspetta la fine della partita, guarda quanti punti ha totalizzato da ogni momento in poi, e usa questi punteggi osservati come campioni. Proprio perché serve il punteggio finale, il gioco deve avere una fine: su problemi che non finiscono mai questi metodi non partono nemmeno.

2. Monte Carlo prediction: stimare i valori dai return osservati#

2.1 L’idea: la media dei return#

Il problema più semplice è, come sempre, la policy evaluation: data una policy π\pi, stimare la sua state-value function. La definizione è

Vπ(s)=Eπ[GtSt=s]V^{\pi}(s) = \mathbb{E}_{\pi}\left[ G_t \mid S_t = s \right]

cioè un valore atteso. Senza modello non si può calcolare questo valore atteso con l’equazione di Bellman; ma se si dispone di un certo numero di episodi generati seguendo proprio π\pi e contenenti visite a ss, ogni visita fornisce un campione del return da ss. Lo stimatore Monte Carlo è la media empirica di questi campioni:

V(s)=1N(s)i=1N(s)Gi(s)V(s) = \frac{1}{N(s)} \sum_{i=1}^{N(s)} G_i(s)

dove N(s)N(s) è il numero di return raccolti per lo stato ss e Gi(s)G_i(s) è l’ii-esimo return osservato a partire da una visita a ss.

Dal valore atteso alla media. La definizione di V^{\pi} come valore atteso del return viene approssimata dalla media dei return osservati negli episodi (a destra, la pila di episodi raccolti; in evidenza un episodio con un ciclo). (Slide del corso.)

Un dettaglio da non trascurare: gli episodi devono essere generati dalla stessa policy che si vuole valutare; se i dati provenissero da un’altra policy, la media stimerebbe la value function di quell’altra policy (questo problema, tutt’altro che secondario, sarà ripreso e risolto nella sezione 8 con l’importance sampling).

Idea chiave: la Monte Carlo prediction stima Vπ(s)V^{\pi}(s) come media aritmetica dei return osservati dopo le visite a ss negli episodi generati da π\pi. Nessuna equazione di Bellman, nessun modello: solo la definizione di valore atteso approssimata con una media empirica.

In parole semplici: per sapere quanto vale trovarsi in una certa situazione seguendo una strategia, si guardano tutte le volte che ci si è passati e si fa la media di quanto si è guadagnato da lì alla fine. Più volte ci si passa, più la media è affidabile.

2.2 Una sottigliezza: first-visit ed every-visit#

C’è un dettaglio tecnico che la definizione lascia aperto: che cosa fare quando lo stesso stato viene visitato più volte nello stesso episodio? Si consideri un episodio con un ciclo:

s1s2s3s2s3s4  (terminale)s_1 \to s_2 \to s_3 \to s_2 \to s_3 \to s_4 \; (\text{terminale})

Lo stato s2s_2 compare due volte, ai tempi t=1t = 1 e t=3t = 3, e lo stesso vale per s3s_3. Nel calcolare i campioni di return per s2s_2 si deve partire dalla prima occorrenza, dalla seconda, o da entrambe? Le due risposte possibili definiscono i due stimatori Monte Carlo standard.

s1s2s3s2s3s4t = 0t = 1t = 2t = 3t = 4terminaleil ciclo rivisita s2 e s3prima visita nell'episodiovisita successivafirst-visit: media solo i return dalle visite blu · every-visit: da tutte
Every-visit MC

Per ogni episodio, si aggiunge alla media di ss un return per ogni visita a ss nell’episodio. Nell’esempio, l’episodio contribuisce con due campioni a V(s2)V(s_2): il return calcolato da t=1t = 1 e quello calcolato da t=3t = 3.

First-visit MC

Per ogni episodio, si aggiunge alla media di ss soltanto il return calcolato dalla prima visita a ss nell’episodio. Nell’esempio, l’episodio contribuisce con un solo campione a V(s2)V(s_2): il return calcolato da t=1t = 1.

Entrambe le scelte hanno una loro logica. A favore dell’every-visit: trovandosi in s2s_2 non si può sapere in anticipo se si imboccherà il ciclo o si andrà dritti verso il terminale; entrambi gli scenari sono realizzazioni legittime del “futuro a partire da s2s_2”, e una media empirica dovrebbe includerli tutti. A favore del first-visit: i return calcolati dalla prima visita in episodi diversi sono campioni indipendenti e identicamente distribuiti della variabile aleatoria GtSt=sG_t \mid S_t = s, il che rende lo stimatore più pulito dal punto di vista statistico.

2.3 Proprietà degli stimatori: bias, varianza, convergenza#

Le proprietà statistiche dei due stimatori sono il criterio con cui confrontarli.

Entrambi convergono asintoticamente alla vera value function: la scelta tra i due, in pratica, dipende soprattutto dalla convenienza implementativa, e ai fini del corso vanno considerati due varianti equivalenti dello stesso metodo.

In parole semplici: first-visit conta ogni episodio una volta sola per stato: campioni indipendenti, media onesta fin da subito, ma butta via un po’ di dati. Every-visit usa tutte le occorrenze: più dati per episodio, ma campioni imparentati tra loro, e la media è leggermente sbilanciata finché i dati sono pochi. Con abbastanza episodi arrivano entrambi allo stesso risultato.

2.4 L’algoritmo first-visit e il calcolo dei return all’indietro#

Il calcolo dei return per tutti gli istanti di un episodio si esegue in modo efficiente partendo dalla fine, sfruttando la ricorsione Gt=Rt+1+γGt+1G_t = R_{t+1} + \gamma \, G_{t+1}: il return dell’ultimo passo è il solo reward finale, e ogni passo precedente si ottiene con una somma e una moltiplicazione. Procedere in avanti, ricalcolando ogni volta l’intera somma scontata, sarebbe molto più costoso. Lo pseudocodice della first-visit MC prediction:

Input: policy π da valutare
Inizializza: V(s) arbitraria; Returns(s) ← lista vuota, per ogni s

Ripeti per sempre (per ogni episodio):
    Genera un episodio seguendo π: S0, A0, R1, S1, A1, R2, ..., S(T-1), A(T-1), RT
    G ← 0
    Per t = T-1, T-2, ..., 0:
        G ← γ·G + R(t+1)
        Se St non compare in S0, S1, ..., S(t-1):        # prima visita a St
            aggiungi G a Returns(St)
            V(St) ← media(Returns(St))

“Genera un episodio” ha due letture concrete: con un simulatore significa far giocare l’agente dall’inizio alla fine (una partita a scacchi completa, una mano di blackjack); con dati reali significa prelevare una traiettoria registrata dal dataset. La versione every-visit si ottiene semplicemente eliminando il controllo di prima visita.

3. L’aggiornamento incrementale della media#

3.1 Dalla lista dei return alla media incrementale#

Conservare per ogni stato l’intera lista dei return osservati è uno spreco: della lista serve solo la media, e la media si può aggiornare al volo. Detta μk\mu_k la media dei primi kk campioni x1,,xkx_1, \dots, x_k:

μk=1ki=1kxi=1k(xk+i=1k1xi)=1k(xk+(k1)μk1)=μk1+1k(xkμk1)\mu_k = \frac{1}{k} \sum_{i=1}^{k} x_i = \frac{1}{k} \left( x_k + \sum_{i=1}^{k-1} x_i \right) = \frac{1}{k} \left( x_k + (k-1) \, \mu_{k-1} \right) = \mu_{k-1} + \frac{1}{k} \left( x_k - \mu_{k-1} \right)

Basta quindi tenere, per ogni stato, la stima corrente e un contatore N(s)N(s) delle visite (in senso first-visit o every-visit). All’arrivo di un nuovo return GtG_t per lo stato StS_t:

N(St)N(St)+1,V(St)V(St)+1N(St)(GtV(St))N(S_t) \leftarrow N(S_t) + 1, \qquad V(S_t) \leftarrow V(S_t) + \frac{1}{N(S_t)} \left( G_t - V(S_t) \right)

Questo aggiornamento calcola esattamente la media empirica, senza memorizzare nulla oltre a stima e contatore.

3.2 Il learning rate costante#

In alternativa al contatore si può usare un passo costante α(0,1]\alpha \in (0, 1]:

V(St)V(St)+α(GtV(St))V(S_t) \leftarrow V(S_t) + \alpha \left( G_t - V(S_t) \right)

Con α\alpha costante non si calcola più la media empirica di tutti i campioni: si ottiene una media pesata esponenzialmente, che dà più peso alle osservazioni recenti e dimentica progressivamente quelle antiche, come una finestra mobile sfumata. Con α\alpha piccolo il comportamento è simile alla media vera; il vantaggio della versione a passo costante emerge nei problemi non stazionari, dove l’ambiente (o, come si vedrà nel control, la policy che genera i dati) cambia nel tempo e le osservazioni vecchie diventano fuorvianti: dimenticarle è un pregio, non un difetto.

Idea chiave: tutti gli aggiornamenti visti d’ora in avanti hanno la stessa forma: nuova stima == vecchia stima ++ passo ×\times (target - vecchia stima). In Monte Carlo il target è il return osservato GtG_t: la stima viene spinta verso il target di una frazione dell’errore corrente. Questo schema, con target diversi, sarà il filo conduttore anche del prossimo capitolo.

In parole semplici: invece di conservare tutti i voti presi e rifare la media ogni volta, si tiene la media corrente e la si corregge un po’ a ogni voto nuovo, in proporzione a quanto il voto si discosta dalla media. Con il passo 1/N1/N si ottiene esattamente la media di tutti i voti; con un passo fisso si ottiene una media che “dimentica” i voti vecchi, utile se nel frattempo le cose sono cambiate.

4. Esempio: valutare una policy a blackjack#

4.1 Il problema come task episodico#

Il blackjack è un banco di prova classico per i metodi Monte Carlo. Il giocatore affronta il dealer (gli altri giocatori sono irrilevanti ai fini della vittoria): l’obiettivo è totalizzare con le proprie carte una somma maggiore di quella del dealer senza superare 21. Le figure valgono 10; l’asso vale 11 oppure 1, a scelta del giocatore secondo convenienza (un asso contato come 11 senza sforare si dice usable ace). A ogni turno il giocatore sceglie tra due azioni: hit (chiedere un’altra carta) e stick (fermarsi); se supera 21 perde immediatamente, altrimenti al termine si confronta la somma con quella del dealer. Nella versione considerata le carte sono pescate con reinserimento, quindi non c’è memoria del mazzo e lo stato non deve includere le carte uscite in passato.

La formalizzazione come MDP episodico:

4.2 La valutazione Monte Carlo#

La policy da valutare è volutamente ingenua: stick se la somma è 20 o 21, altrimenti hit. Modellare analiticamente la dinamica one-step di questo problema sarebbe possibile ma laborioso; costruire un simulatore è immediato, ed è tutto ciò che serve a Monte Carlo. Generando episodi e mediando i return (con γ=1\gamma = 1 il return coincide con il reward finale ±1\pm 1 o 00, quindi il valore di uno stato è interpretabile come una probabilità di vittoria “netta”), dopo circa 500.000500{.}000 episodi la stima converge a una value function molto vicina a quella vera.

La value function stimata. A sinistra dopo 10{.}000 episodi, a destra dopo 500{.}000: la superficie si liscia al crescere dei dati. In alto gli stati con usable ace, più rari e quindi più rumorosi a parità di episodi. (Slide del corso.)

Il risultato fotografa bene la qualità della policy: il valore è alto (vicino a +1+1) solo negli stati con somma 20 o 21, dove la policy si ferma con un punteggio fortissimo; in quasi tutti gli altri stati è nettamente negativo, perché continuare a chiedere carta fino a 20 fa sforare molto spesso. È una policy rischiosa, e la value function lo quantifica stato per stato. Si osserva anche un fatto pratico, visibile nella metà superiore della figura: gli stati con usable ace sono più rari, quindi le loro stime sono più rumorose a parità di episodi; la precisione di Monte Carlo dipende da quante volte ciascuno stato viene effettivamente visitato.

In parole semplici: invece di calcolare a tavolino le probabilità del blackjack, si fa giocare al computer mezzo milione di mani con la strategia da valutare e si fa la media dei risultati da ogni situazione. Il quadro che emerge dice che la strategia “tiro finché non arrivo a 20” vince quasi solo quando ci arriva davvero, e nel frattempo sballa spessissimo.

5. Dal prediction al control: il problema dell’esplorazione#

5.1 Generalized policy iteration con Monte Carlo#

Per passare dalla valutazione all’ottimizzazione si riusa lo schema della generalized policy iteration (GPI) del capitolo precedente: alternare un passo di policy evaluation e un passo di policy improvement greedy, fino alla convergenza. Il primo istinto è sostituire la valutazione basata sul modello con la Monte Carlo prediction appena costruita e tenere invariato l’improvement. Qui però si inceppa tutto: l’improvement greedy sulla state-value function è

π(s)=argmaxaA(s)[r(s,a)+γsp(ss,a)V(s)]\pi'(s) = \arg\max_{a \in \mathcal{A}(s)} \left[ r(s, a) + \gamma \sum_{s'} p(s' \mid s, a) \, V(s') \right]

e richiede di nuovo rr e pp, cioè proprio il modello che non c’è. La valutazione era diventata model-free, ma l’improvement è rimasto model-based.

Il punto in cui lo schema si inceppa. L’improvement greedy sulla V richiede il reward atteso e la dinamica one-step: i due punti interrogativi delle slide sono esattamente i termini non disponibili senza modello. (Slide del corso.)
πQvalutazione: stima di Qπ dai returnmiglioramento: π = greedy(Q)nessun modello:argmax su una tabella

La soluzione è spostarsi dalla state-value function alla action-value function. La Qπ(s,a)Q^{\pi}(s, a), return atteso partendo da ss, eseguendo aa e seguendo poi π\pi, si stima con lo stesso identico meccanismo Monte Carlo: si media il return osservato dopo le visite alla coppia (s,a)(s, a) invece che al solo stato ss (di nuovo in variante first-visit o every-visit). E con la QQ in mano l’improvement diventa banale e completamente model-free:

π(s)=argmaxaA(s)Q(s,a)\pi'(s) = \arg\max_{a \in \mathcal{A}(s)} Q(s, a)

un semplice confronto tra i valori delle azioni disponibili, senza alcun lookahead attraverso il modello. Il prezzo di questo passaggio è statistico: le coppie stato-azione sono più numerose degli stati (un fattore A|\mathcal{A}|), quindi a parità di qualità della stima servono più dati, perché ogni coppia deve essere visitata abbastanza volte.

Idea chiave: senza modello, la value function giusta da stimare è la QQ, non la VV: la VV permette di migliorare la policy solo guardando “un passo avanti” attraverso il modello, mentre la QQ contiene già il confronto tra le azioni e rende l’improvement un semplice argmax\arg\max su una tabella.

In parole semplici: sapere quanto vale ogni situazione non basta per scegliere la mossa, se non si sa dove porta ciascuna mossa; sapere quanto vale ogni mossa in ogni situazione invece basta e avanza: si sceglie la mossa col valore più alto e via. Per questo, quando il modello manca, si impara direttamente il valore delle mosse.

5.2 Il problema dell’esplorazione#

La stima Monte Carlo di QπQ^{\pi} converge se ogni coppia stato-azione viene visitata infinite volte al crescere degli episodi:

N(s,a)sS,  aA(s)N(s, a) \to \infty \qquad \forall s \in \mathcal{S}, \; \forall a \in \mathcal{A}(s)

Ed è qui che emerge il problema strutturale del control. Se la policy π\pi che genera i dati è deterministica, in ogni stato ss essa sceglie sempre la stessa azione π(s)\pi(s): gli episodi conterranno solo coppie (s,π(s))(s, \pi(s)), e le coppie (s,a)(s, a) con aπ(s)a \neq \pi(s) non compariranno mai nei dati.

Le azioni che i dati non contengono. Seguendo una policy deterministica (catena in nero), le azioni alternative (in rosso tratteggiato) non vengono mai eseguite: per quelle coppie stato-azione non arriverà mai un return. (Slide del corso.)

Per quelle coppie non arriverà nessun return, la stima di Q(s,a)Q(s, a) resterà priva di supporto empirico, e l’argmax\arg\max dell’improvement confronterà numeri privi di significato. Nel blackjack: con la policy “hit sotto 20”, non si osserverà mai lo stato “somma 18” seguito dall’azione stick, quindi non si potrà mai scoprire se fermarsi a 18 sia meglio.

Questa è una differenza profonda rispetto al planning con programmazione dinamica: lì il modello permette di “interrogare” qualunque coppia stato-azione a tavolino, con uno sweep sistematico su tutto lo spazio, e il problema dell’esplorazione non si pone. Quando si impara dall’interazione, invece, si conosce solo ciò che si prova: la distribuzione dei dati è determinata dalla policy seguita, e ciò che la policy non fa resta invisibile. Per far funzionare il control model-free bisogna quindi iniettare nei dati una qualche deviazione sistematica dalla policy corrente: questa componente si chiama esplorazione.

Idea chiave: per migliorare una policy servono stime di QQ anche per le azioni che la policy non sceglierebbe; ma i dati generati da una policy deterministica non contengono mai quelle azioni. Senza esplorazione, il control model-free non può funzionare: è un punto cardine che tornerà, in forme diverse, in tutto il reinforcement learning.

In parole semplici: se al ristorante si ordina sempre lo stesso piatto, non si saprà mai se gli altri sono migliori: il menù degli altri piatti resta una colonna di punti interrogativi. Per compilare la pagella di tutte le opzioni bisogna ogni tanto ordinare qualcosa di diverso, anche a costo di qualche delusione.

5.3 Exploring starts#

L’idea più semplice per garantire l’esplorazione agisce solo sull’inizio dell’episodio.

Exploring starts

Ogni episodio inizia da una coppia stato-azione (S0,A0)(S_0, A_0) scelta casualmente, con probabilità positiva per ogni coppia; dopo il primo passo l’agente segue la policy corrente π\pi.

Solo il primo passo è casuale. Stato e prima azione sono estratti a sorte (“Random”), tutto il resto dell’episodio segue \pi e la dinamica p: nel gridworld, l’episodio parte da una cella qualsiasi con una mossa qualsiasi. (Slide del corso.)

La casualità è confinata al primo passo, ma è sufficiente: con abbastanza episodi ogni coppia stato-azione compare come punto di partenza infinite volte, e la condizione di convergenza della stima di QQ è soddisfatta. Combinando exploring starts, valutazione Monte Carlo della QQ e improvement greedy si ottiene il primo algoritmo di control model-free, il Monte Carlo ES (Exploring Starts); una scelta efficace è eseguire l’improvement subito, episodio per episodio, sugli stati visitati, così che l’episodio successivo sia già generato dalla policy migliorata:

Inizializza: π(s) arbitraria; Q(s,a) arbitraria; Returns(s,a) ← lista vuota

Ripeti per sempre (per ogni episodio):
    Scegli S0 e A0 a caso (ogni coppia (s,a) con probabilità > 0)
    Genera un episodio da S0, A0 seguendo π
    G ← 0
    Per t = T-1, T-2, ..., 0:
        G ← γ·G + R(t+1)
        Se (St, At) non compare prima del tempo t:          # prima visita
            aggiungi G a Returns(St, At)
            Q(St, At) ← media(Returns(St, At))
            π(St) ← argmax_a Q(St, a)                       # improvement

Applicato al blackjack (dove il simulatore permette di imporre qualunque stato iniziale e qualunque prima azione), Monte Carlo ES trova una policy ottima ben diversa da quella ingenua di partenza: senza usable ace conviene essere prudenti e fermarsi molto prima di 20 (la soglia di stick dipende dalla carta scoperta del dealer); con usable ace si può giocare in modo più aggressivo e continuare a chiedere carta più a lungo, perché l’asso declassabile da 11 a 1 riduce il rischio di sforare.

La soluzione del blackjack. A sinistra la policy ottima trovata da Monte Carlo ES (regione STICK contro regione HIT, in funzione della carta del dealer e della somma del giocatore), a destra la value function ottima corrispondente. (Slide del corso.)

Il limite di exploring starts è però evidente: richiede il controllo completo delle condizioni iniziali dell’episodio. Con un simulatore è banale (“genera una mano in cui il giocatore ha 18 e forzalo a fare stick”); in un problema reale è irrealizzabile. Nell’apprendimento di una policy di guida autonoma non si può materializzare a comando lo stato iniziale “sta piovendo, ostacolo a sinistra, velocità 100 km/h”: lo stato iniziale lo decide il mondo, non lo sperimentatore. Serve un meccanismo di esplorazione che agisca durante l’interazione, non solo al primo passo.

In parole semplici: exploring starts risolve l’esplorazione facendo iniziare ogni partita da una situazione e una prima mossa estratte a sorte, e poi lasciando giocare la strategia corrente. Funziona benissimo quando si comanda il simulatore, ma nel mondo reale non si può “apparecchiare” la situazione di partenza a piacere: serve un piano B.

5.4 Il dilemma esplorazione-sfruttamento#

Il piano B deve rispondere a una tensione che è uno dei problemi fondanti del reinforcement learning. Da un lato conviene sfruttare (exploit) la conoscenza corrente: seguire la policy migliore trovata finora, che presumibilmente incorpora quanto di buono si è appreso. Dall’altro, seguendola ciecamente non si scoprirà mai se esistono alternative migliori: bisogna esplorare (explore), cioè provare di tanto in tanto azioni diverse. L’analogia con gli scacchi è calzante: chi gioca sempre e solo la teoria dei libri non saprà mai se, in una data posizione, esiste una mossa fuori teoria più forte; chi invece sperimenta troppo spreca la maggior parte delle partite giocando male. Nessuno dei due estremi funziona: troppa esplorazione butta via le prestazioni, troppo sfruttamento congela l’apprendimento. Il problema di trovare il giusto equilibrio è noto come dilemma esplorazione-sfruttamento (exploration-exploitation dilemma), e distingue nettamente l’apprendimento dal planning: con il modello a disposizione il dilemma non esiste, perché nulla deve essere “provato” per essere conosciuto.

In parole semplici: è il dilemma del ristorante: ordinare il piatto preferito (garanzia di cena decente, zero scoperte) o provarne uno nuovo (rischio di cena mediocre, possibilità di trovare un piatto migliore)? Un agente che impara deve fare entrambe le cose, nelle giuste dosi.

6. Policy ε-soft: esplorare dentro la policy#

6.1 Policy ε-soft ed ε-greedy#

La soluzione più semplice al dilemma incorpora l’esplorazione nella policy stessa, rinunciando alle policy deterministiche. Nei capitoli sul planning ci si era limitati alle deterministiche perché negli MDP esiste sempre una policy ottima deterministica; qui la stocasticità viene reintrodotta di proposito, non per essere ottimi ma per continuare a esplorare.

Policy ε-soft

Una policy π\pi è ε\varepsilon-soft se assegna a ogni azione, in ogni stato, una probabilità almeno pari a ε/A(s)\varepsilon / |\mathcal{A}(s)|:

π(as)εA(s)sS,  aA(s)\pi(a \mid s) \geq \frac{\varepsilon}{|\mathcal{A}(s)|} \qquad \forall s \in \mathcal{S}, \; \forall a \in \mathcal{A}(s)

Una policy ε\varepsilon-soft, per costruzione, prova prima o poi tutte le azioni in tutti gli stati raggiunti: l’esplorazione è garantita by design, a ogni passo dell’interazione e non solo all’inizio dell’episodio. Tra tutte le policy ε\varepsilon-soft, quella di interesse pratico è la più vicina possibile a una policy greedy.

Policy ε-greedy

Data una stima Q(s,a)Q(s, a), la policy ε\varepsilon-greedy assegna a tutte le azioni la probabilità minima ε/A(s)\varepsilon / |\mathcal{A}(s)| e concentra tutta la probabilità residua sull’azione greedy a=argmaxaQ(s,a)a^{*} = \arg\max_{a'} Q(s, a'):

π(as)={1ε+εA(s)se a=aεA(s)altrimenti\pi(a \mid s) = \begin{cases} 1 - \varepsilon + \dfrac{\varepsilon}{|\mathcal{A}(s)|} & \text{se } a = a^{*} \\[2mm] \dfrac{\varepsilon}{|\mathcal{A}(s)|} & \text{altrimenti} \end{cases}

a1a2a3a4a5ε/|A|azione greedy:1 − ε + ε/|A|aπ(a|s)

Equivalentemente: con probabilità 1ε1 - \varepsilon si sceglie l’azione greedy, con probabilità ε\varepsilon si sceglie un’azione uniformemente a caso (inclusa eventualmente la greedy stessa, da cui il termine ε/A\varepsilon / |\mathcal{A}| aggiuntivo). È “quasi” una policy deterministica: se QQ fosse la QQ^{*}, la policy ε\varepsilon-greedy sarebbe vicina alla policy ottima quanto si vuole, con ε\varepsilon a fare da manopola che regola la distanza dall’ottimalità in cambio di esplorazione. L’obiettivo dell’apprendimento cambia di conseguenza: non si cerca più la policy ottima deterministica, ma la migliore policy ε\varepsilon-soft.

In parole semplici: una policy ε\varepsilon-greedy quasi sempre gioca la mossa che ritiene migliore, ma con una piccola probabilità ε\varepsilon tira a sorte tra tutte le mosse. Quel pizzico di casualità garantisce che ogni opzione venga assaggiata all’infinito, che è esattamente la condizione che serviva per stimare la QQ di tutte le coppie.

6.2 ε-soft Monte Carlo policy iteration#

L’algoritmo di control completo, nella versione con media incrementale, si ottiene innestando la policy ε\varepsilon-greedy nel ciclo di GPI:

Parametri: ε > 0; γ
Inizializza: Q(s,a) arbitraria; N(s,a) ← 0; π ← una policy ε-soft qualsiasi

Ripeti per sempre (per ogni episodio):
    Genera un episodio seguendo π: S0, A0, R1, ..., S(T-1), A(T-1), RT
    G ← 0
    Per t = T-1, T-2, ..., 0:
        G ← γ·G + R(t+1)
        Se (St, At) non compare prima del tempo t:          # prima visita
            N(St, At) ← N(St, At) + 1
            Q(St, At) ← Q(St, At) + (1/N(St, At))·(G − Q(St, At))
            a* ← argmax_a Q(St, a)          # a parità di valore, scelta casuale
            Per ogni a ∈ A(St):
                π(a|St) ← 1 − ε + ε/|A(St)|    se a = a*
                π(a|St) ← ε/|A(St)|            altrimenti

Rispetto a Monte Carlo ES cambiano due cose: l’episodio è generato dalla policy ε\varepsilon-greedy corrente (niente più condizioni iniziali forzate) e l’improvement aggiorna la distribuzione ε\varepsilon-greedy invece di una tabella deterministica. Se più azioni condividono il valore massimo, l’azione greedy si sceglie a caso tra esse: la scelta non influenza le garanzie. Questo pseudocodice è direttamente utilizzabile in pratica.

6.3 Il teorema di ε-greedy policy improvement#

Sostituire l’improvement greedy con quello ε\varepsilon-greedy solleva una domanda legittima: la nuova policy è davvero un miglioramento? Per le policy deterministiche la garanzia veniva dal policy improvement theorem; ne esiste un analogo per il mondo ε\varepsilon-soft.

Teorema di ε-greedy policy improvement

Sia π\pi una qualunque policy ε\varepsilon-soft e sia π\pi' la policy ε\varepsilon-greedy rispetto a QπQ^{\pi}. Allora π\pi' è un miglioramento di π\pi: Vπ(s)Vπ(s)V^{\pi'}(s) \geq V^{\pi}(s) per ogni sSs \in \mathcal{S}.

Dimostrazione. Si valuta, in un generico stato ss, la qualità della prima mossa scelta da π\pi' e giudicata con i valori di π\pi (per compattezza si scrive A|\mathcal{A}| per A(s)|\mathcal{A}(s)|):

aπ(as)Qπ(s,a)=εAaQπ(s,a)+(1ε)maxaQπ(s,a)\sum_{a} \pi'(a \mid s) \, Q^{\pi}(s, a) = \frac{\varepsilon}{|\mathcal{A}|} \sum_{a} Q^{\pi}(s, a) + (1 - \varepsilon) \max_{a} Q^{\pi}(s, a)

dove il primo termine raccoglie la probabilità di base ε/A\varepsilon / |\mathcal{A}| distribuita su tutte le azioni e il secondo la probabilità residua 1ε1 - \varepsilon concentrata sull’azione greedy. Il massimo domina qualunque media pesata: per ogni insieme di pesi w(a)0w(a) \geq 0 con aw(a)=1\sum_a w(a) = 1 vale maxaQπ(s,a)aw(a)Qπ(s,a)\max_a Q^{\pi}(s, a) \geq \sum_a w(a) \, Q^{\pi}(s, a). Si scelgono i pesi

w(a)=π(as)εA1εw(a) = \frac{\pi(a \mid s) - \dfrac{\varepsilon}{|\mathcal{A}|}}{1 - \varepsilon}

che sono legittimi proprio perché π\pi è ε\varepsilon-soft: i numeratori sono non negativi (π(as)ε/A\pi(a \mid s) \geq \varepsilon / |\mathcal{A}|) e la loro somma è (1AεA)/(1ε)=1\left( 1 - |\mathcal{A}| \cdot \frac{\varepsilon}{|\mathcal{A}|} \right) / (1 - \varepsilon) = 1. Sostituendo:

aπ(as)Qπ(s,a)εAaQπ(s,a)+(1ε)aπ(as)εA1εQπ(s,a)\sum_{a} \pi'(a \mid s) \, Q^{\pi}(s, a) \geq \frac{\varepsilon}{|\mathcal{A}|} \sum_{a} Q^{\pi}(s, a) + (1 - \varepsilon) \sum_{a} \frac{\pi(a \mid s) - \frac{\varepsilon}{|\mathcal{A}|}}{1 - \varepsilon} \, Q^{\pi}(s, a)

I due termini in ε/A\varepsilon / |\mathcal{A}| si cancellano e resta

aπ(as)Qπ(s,a)aπ(as)Qπ(s,a)=Vπ(s)\sum_{a} \pi'(a \mid s) \, Q^{\pi}(s, a) \geq \sum_{a} \pi(a \mid s) \, Q^{\pi}(s, a) = V^{\pi}(s)

In ogni stato, dunque, la prima mossa di π\pi' seguita da π\pi vale almeno quanto Vπ(s)V^{\pi}(s); per il policy improvement theorem (nella versione per policy stocastiche) questa condizione si propaga a tutti i passi futuri e implica Vπ(s)Vπ(s)V^{\pi'}(s) \geq V^{\pi}(s) in ogni stato. \blacksquare

Il significato pratico: iterando valutazione Monte Carlo e improvement ε\varepsilon-greedy, ogni iterazione dell’algoritmo della sezione 6.2 produce una policy ε\varepsilon-soft non peggiore della precedente; la sequenza migliora monotonicamente e converge verso la migliore policy ε\varepsilon-soft del problema.

In parole semplici: rendere ε\varepsilon-greedy la policy rispetto ai valori appena stimati non può mai peggiorare le cose, purché si resti nella famiglia delle policy che esplorano almeno un po’. È la versione “con casualità incorporata” del solito passo di miglioramento: si sposta la preferenza sull’azione col valore più alto, mantenendo la briciola di probabilità ε\varepsilon su tutte le altre.

6.4 GLIE: dall’ottimo ε-soft all’ottimo vero#

L’algoritmo della sezione 6.2 converge alla migliore policy ε\varepsilon-soft, che per costruzione non è la policy ottima dell’MDP: continua a sprecare probabilità ε\varepsilon su azioni subottime. D’altra parte l’esplorazione non si può spegnere troppo presto, o le stime di QQ smettono di migliorare dove servirebbe. La via d’uscita è far decrescere l’esplorazione nel tempo, ma non troppo in fretta; la formalizzazione di questo compromesso è la condizione GLIE.

GLIE (Greedy in the Limit with Infinite Exploration)

Una successione di policy {πk}\{\pi_k\} soddisfa la condizione GLIE se:

  • Esplorazione infinita: ogni coppia stato-azione viene visitata infinite volte, limkNk(s,a)=\lim_{k \to \infty} N_k(s, a) = \infty per ogni (s,a)(s, a);
  • Greedy al limite: la policy converge a una policy greedy rispetto alla stima corrente, limkπk(as)=1(a=argmaxaQk(s,a))\lim_{k \to \infty} \pi_k(a \mid s) = \mathbb{1}\left( a = \arg\max_{a'} Q_k(s, a') \right).
\varepsilon_k = 1/k esplorazione infinita:la somma degli εk divergegreedy al limite:\varepsilon_k \to 0 episodio kεk

L’esempio canonico è proprio la policy ε\varepsilon-greedy con ε\varepsilon che decresce come εk=1/k\varepsilon_k = 1/k (dove kk è l’indice dell’episodio): la somma kεk\sum_k \varepsilon_k diverge, quindi l’esplorazione complessiva è infinita e ogni coppia continua a essere provata; al tempo stesso εk0\varepsilon_k \to 0, quindi la policy diventa greedy al limite. Sotto la condizione GLIE il Monte Carlo control gode della garanzia piena: la stima converge alla action-value function ottima, Q(s,a)Q(s,a)Q(s, a) \to Q^{*}(s, a), e di conseguenza la policy converge alla policy ottima π\pi^{*}.

In parole semplici: all’inizio si esplora parecchio, perché non si sa nulla; man mano che le stime diventano affidabili si esplora sempre meno, fino a comportarsi da puri sfruttatori. Se la “manopola” ε\varepsilon scende abbastanza lentamente da provare tutto infinite volte, ma scende davvero a zero, si ottiene il meglio dei due mondi: esplorazione sufficiente durante l’apprendimento e policy ottima alla fine.

7. On-policy contro off-policy#

7.1 Due modi di imparare#

Tutti gli algoritmi visti finora condividono una caratteristica implicita: la policy che genera i dati e la policy di cui si stimano i valori sono la stessa. Questo schema si chiama apprendimento on-policy. La sua conseguenza scomoda è ormai chiara: per esplorare bisogna che la policy seguita sia stocastica, quindi non si può seguire (e valutare direttamente) una policy deterministica ottima; il meglio raggiungibile senza accorgimenti come GLIE è l’ottimo nella famiglia ε\varepsilon-soft, e comunque l’agente continua a eseguire azioni casuali durante l’interazione con l’ambiente, il che in certi contesti è indesiderabile di per sé.

L’idea alternativa è disaccoppiare i due ruoli.

Apprendimento on-policy e off-policy
  • On-policy: l’agente apprende le value function della stessa policy usata per selezionare le azioni; esplorazione e apprendimento sono legati, e non si può apprendere facilmente una policy ottima deterministica.
  • Off-policy: l’agente seleziona le azioni con una behavior policy b(as)b(a \mid s) e usa i dati così generati per apprendere le value function di una target policy π(as)\pi(a \mid s) diversa; la behavior policy può essere fortemente esplorativa (anche del tutto casuale), mentre la target può essere una policy deterministica, inclusa la policy ottima π\pi^{*}.
On-policypolicy πε-softambientestima di Qπmedia dei returnazioniepisodiimprovementla stessa policy esplora, genera i dati e viene valutataOff-policybehavior besplorativaambientetarget πanche deterministicaazioniepisodi ripesati (ρ)chi raccoglie l'esperienza (b) e chi ne beneficia (π) sono policy diverse

L’off-policy scioglie elegantemente il dilemma esplorazione-sfruttamento: l’esplorazione la fa la behavior policy, che può permettersi di essere casuale quanto serve; l’ottimalità la persegue la target policy, che non deve più contenere alcuna componente esplorativa. In più, l’off-policy permette di imparare da dati generati da altri: log storici, dimostrazioni umane, policy di sicurezza già operative.

In parole semplici: on-policy è imparare a giocare giocando in prima persona con la propria strategia, difetti esplorativi inclusi; off-policy è imparare la strategia che si vorrebbe avere guardando partite giocate da qualcun altro, anche da uno che gioca a caso. Il secondo schema separa chi raccoglie l’esperienza da chi ne beneficia.

7.2 Target, behavior e la condizione di copertura#

L’esempio guida delle slide è un gridworld: un gatto deve raggiungere la casa. La target policy è deterministica e ragionevole (sempre a destra, poi in su lungo l’ultima colonna); la behavior policy è uniforme su tutte le direzioni, cioè puro vagabondaggio esplorativo. La domanda dell’off-policy è: si possono usare le passeggiate casuali del gatto per capire quanto rende la strategia deterministica?

Target e behavior policy. A sinistra la target \pi(a \mid s), deterministica; a destra la behavior b(a \mid s), uniforme su tutte le azioni: è lei a generare gli episodi. (Slide del corso.)

La risposta è sì, ma non gratis: c’è un vincolo di compatibilità tra le due policy. Si può apprendere solo una target policy che sia coperta dalla behavior policy:

π(as)>0    b(as)>0s,a\pi(a \mid s) > 0 \implies b(a \mid s) > 0 \qquad \forall s, a

La copertura in pratica. Ogni azione prescritta dalla target (frecce) deve avere probabilità positiva sotto la behavior: la behavior uniforme copre qualunque target. (Slide del corso.)

Ogni azione che la target policy potrebbe eseguire deve avere probabilità positiva di essere eseguita anche dalla behavior policy: altrimenti nei dati mancheranno proprio le transizioni che servono per valutarla. Il gridworld del gatto rende l’idea anche al contrario: se la behavior fosse deterministica e percorresse sempre lo stesso corridoio, i dati conterrebbero un solo tubo di coppie stato-azione, e sarebbe impossibile valutare una target che passi per il centro della griglia, perché nessuna delle sue azioni sarebbe mai stata osservata. È lo stesso principio dell’esplorazione, riletto in chiave off-policy: ciò che la behavior policy non prova mai, nessuna target policy potrà mai impararlo. In pratica la condizione si garantisce scegliendo come behavior una policy ε\varepsilon-soft: probabilità positiva su tutte le azioni, copertura di qualunque target.

In parole semplici: si può imparare solo dalle esperienze che qualcuno ha effettivamente fatto. Se il dimostratore non prova mai una certa mossa in una certa situazione, nessuna quantità di matematica potrà dire quanto vale quella mossa: la behavior policy deve “coprire” tutte le mosse che interessano alla target.

8. Importance sampling#

8.1 Il principio: cambiare distribuzione a una media#

Resta da capire come si possano usare dati generati da bb per stimare i valori di π\pi: mediare direttamente i return osservati stimerebbe VbV^{b}, non VπV^{\pi}. Lo strumento è una tecnica statistica generale, l’importance sampling, che permette di stimare il valore atteso rispetto a una distribuzione usando campioni estratti da un’altra.

Sia XX una variabile aleatoria e siano PP e QQ due distribuzioni. Il valore atteso sotto PP si può riscrivere facendo comparire QQ:

EXP[X]=xxP(x)=xxP(x)Q(x)Q(x)=EXQ[XP(X)Q(X)]\mathbb{E}_{X \sim P}\left[ X \right] = \sum_{x} x \, P(x) = \sum_{x} x \, \frac{P(x)}{Q(x)} \, Q(x) = \mathbb{E}_{X \sim Q}\left[ X \, \frac{P(X)}{Q(X)} \right]

(purché Q(x)>0Q(x) > 0 ovunque P(x)>0P(x) > 0: è esattamente la condizione di copertura). Il rapporto ρ(x)=P(x)/Q(x)\rho(x) = P(x)/Q(x) pesa ogni campione: amplifica i valori che PP renderebbe più frequenti di quanto faccia QQ, e smorza quelli sovra-rappresentati da QQ. La versione campionaria: dati x1,,xnx_1, \dots, x_n estratti da QQ,

EXP[X]1ni=1nρ(xi)xi\mathbb{E}_{X \sim P}\left[ X \right] \approx \frac{1}{n} \sum_{i=1}^{n} \rho(x_i) \, x_i

una media empirica in cui ogni osservazione è corretta dal proprio peso.

In parole semplici: se i dati arrivano dalla distribuzione “sbagliata”, non si buttano: si ripesano. Un’osservazione che sotto la distribuzione giusta sarebbe stata due volte più probabile conta doppio; una che non sarebbe mai potuta accadere conta zero. Con i pesi giusti, la media dei dati sbagliati stima la quantità giusta.

8.2 Il coefficiente ρ per la policy evaluation#

Nel contesto Monte Carlo la variabile da mediare è il return GG e la “distribuzione” è quella sulle traiettorie indotta dalla policy. La probabilità di osservare, a partire da StS_t, la sequenza di azioni e stati At,St+1,At+1,,STA_t, S_{t+1}, A_{t+1}, \dots, S_T seguendo π\pi è

P[At,St+1,,STSt,π]=k=tT1π(AkSk)p(Sk+1Sk,Ak)\mathbb{P}\left[ A_t, S_{t+1}, \dots, S_T \mid S_t, \pi \right] = \prod_{k=t}^{T-1} \pi(A_k \mid S_k) \, p(S_{k+1} \mid S_k, A_k)

il prodotto, passo dopo passo, della probabilità di scegliere l’azione osservata e della probabilità di transizione verso lo stato osservato (i reward non aggiungono fattori dipendenti dalla policy: dipendono solo da stato e azione). Il peso di importance sampling di una traiettoria è il rapporto tra la sua probabilità sotto la target e sotto la behavior:

ρt:T1=k=tT1π(AkSk)p(Sk+1Sk,Ak)k=tT1b(AkSk)p(Sk+1Sk,Ak)=k=tT1π(AkSk)b(AkSk)\rho_{t:T-1} = \frac{\prod_{k=t}^{T-1} \pi(A_k \mid S_k) \, p(S_{k+1} \mid S_k, A_k)}{\prod_{k=t}^{T-1} b(A_k \mid S_k) \, p(S_{k+1} \mid S_k, A_k)} = \prod_{k=t}^{T-1} \frac{\pi(A_k \mid S_k)}{b(A_k \mid S_k)}

Il punto cruciale è la cancellazione delle probabilità di transizione: la dinamica pp compare identica al numeratore e al denominatore (la traiettoria osservata è la stessa) e sparisce dal rapporto. Il peso dipende solo dalle due policy, entrambe note per costruzione: il metodo resta completamente model-free. La value function della target policy si stima allora come media pesata dei return osservati seguendo la behavior:

Vπ(s)1ni=1nρiGiV^{\pi}(s) \approx \frac{1}{n} \sum_{i=1}^{n} \rho_i \, G_i

dove GiG_i è il return dell’ii-esima visita a ss nei dati generati da bb, e ρi\rho_i il peso della corrispondente porzione di traiettoria.

behavior b uniforme su 4 azioni: b(a|s) = 0,25s0s1s2azione di πazione di πρ = (1/0,25)·(1/0,25) = 16amplificata ×16s0s1s2azione di πazione fuori da πρ = (1/0,25)·(0/0,25) = 0scartatala target π è deterministica: i rapporti π/b valgono 1/0,25 sulle azioni di π e 0 sulle altre

Un esempio chiarisce la meccanica dei pesi. Sia la target policy π\pi deterministica e la behavior bb uniforme su 4 azioni (b(as)=0,25b(a \mid s) = 0{,}25 per ogni azione). Se in un tratto di traiettoria di due passi la behavior esegue esattamente le due azioni che π\pi prescrive, il peso è

ρ=110,250,25=16\rho = \frac{1 \cdot 1}{0{,}25 \cdot 0{,}25} = 16

quel return, raro sotto bb ma certo sotto π\pi, viene amplificato di un fattore 16. Se invece la traiettoria contiene anche una sola azione che π\pi non sceglierebbe, il numeratore contiene uno zero e ρ=0\rho = 0: quel return viene escluso del tutto dalla media, perché sotto la target policy quella traiettoria non potrebbe mai realizzarsi.

Idea chiave: il peso ρ\rho è il prodotto, lungo la traiettoria, dei rapporti π/b\pi / b sulle sole azioni: la dinamica dell’ambiente si semplifica e non serve conoscerla. Traiettorie compatibili con la target vengono amplificate, traiettorie incompatibili azzerate: la media pesata dei return “vissuti da bb” diventa una stima dei return “che avrebbe vissuto π\pi”.

In parole semplici: guardando le partite di un giocatore che muove a caso, si tengono solo i tratti di partita in cui, per caso, ha giocato esattamente come avrebbe giocato la strategia che interessa, e li si conta molte volte per compensarne la rarità; i tratti dove ha fatto mosse “fuori strategia” si scartano. Così le partite di un altro raccontano quanto rende la propria strategia.

8.3 Ordinary e weighted importance sampling#

La media pesata dei return si può normalizzare in due modi diversi, e la scelta ha conseguenze statistiche importanti.

Ordinary e weighted importance sampling

Dati nn return G1,,GnG_1, \dots, G_n con pesi ρ1,,ρn\rho_1, \dots, \rho_n:

  • Ordinary importance sampling: si divide per il numero di campioni,

V(s)=i=1nρiGinV(s) = \frac{\sum_{i=1}^{n} \rho_i \, G_i}{n}

  • Weighted importance sampling: si divide per la somma dei pesi,

V(s)=i=1nρiGii=1nρiV(s) = \frac{\sum_{i=1}^{n} \rho_i \, G_i}{\sum_{i=1}^{n} \rho_i}

Le proprietà sono speculari:

Il confronto empirico. Errore quadratico medio delle due stime sull’esempio di riferimento (media su 100 run): la versione ordinaria parte lontanissima e impiega un centinaio di episodi per rientrare, la pesata è ragionevole fin da subito. (Slide del corso.)

In parole semplici: la versione ordinaria è il contabile onesto ma nervoso: in media dice sempre il valore giusto, ma con pochi dati può sparare numeri assurdi, perché i pesi giganteschi la sballottano. La versione pesata è più prudente: all’inizio è un po’ di parte, ma dà subito numeri sensati, e con abbastanza dati la sua distorsione svanisce.

8.4 Off-policy Monte Carlo prediction e control#

Lo pseudocodice della off-policy every-visit MC prediction con ordinary importance sampling, in forma incrementale (il peso WW accumula i rapporti π/b\pi / b procedendo all’indietro, così che al tempo tt valga W=ρt:T1W = \rho_{t:T-1}):1

Input: behavior policy b; target policy π (con copertura: π(a|s)>0 ⟹ b(a|s)>0)
Inizializza: V(s) arbitraria; N(s) ← 0

Ripeti per sempre (per ogni episodio):
    Genera un episodio seguendo b: S0, A0, R1, ..., S(T-1), A(T-1), RT
    G ← 0;  W ← 1
    Per t = T-1, T-2, ..., 0:
        G ← γ·G + R(t+1)
        W ← W · π(At|St) / b(At|St)
        N(St) ← N(St) + 1
        V(St) ← V(St) + (1/N(St)) · (W·G − V(St))

Si noti che se a un certo passo WW diventa zero (la behavior ha eseguito un’azione che la target non farebbe mai), tutti i pesi dei passi precedenti dell’episodio resteranno zero: i return corrispondenti entrano nella media con contributo nullo, coerentemente con l’esclusione vista sopra. La stessa idea si estende dal prediction al control off-policy: si stima la QQ della target policy con importance sampling e, dopo ogni episodio, si applica l’improvement rendendo la target greedy rispetto alla QQ corrente. C’è solo un’avvertenza: quando la target cambia, cambiano anche i coefficienti ρ\rho con cui verranno pesati gli episodi successivi, perché ρ\rho dipende da π\pi. Il risultato è un algoritmo che si comporta in modo esplorativo (tramite bb, per esempio ε\varepsilon-soft) e impara al tempo stesso una policy ottima deterministica: la separazione dei ruoli promessa dall’off-policy.

9. I limiti dei metodi Monte Carlo#

I metodi Monte Carlo raggiungono l’obiettivo dichiarato: policy evaluation e control senza alcuna conoscenza del modello, con garanzie di convergenza. Hanno però limiti strutturali che motivano la famiglia di metodi del prossimo capitolo:

Il prossimo capitolo introduce il temporal-difference learning, che affronta esattamente questi punti: aggiornamenti a ogni passo (anche in task continui) e varianza molto più bassa, al prezzo di un po’ di bias; il confronto sistematico tra Monte Carlo, TD e programmazione dinamica sarà sviluppato lì.

In parole semplici: Monte Carlo è affidabile ma paziente all’eccesso: aspetta la fine di ogni partita per imparare, ha bisogno che le partite finiscano, e ogni singola partita è un campione molto rumoroso. Su problemi lunghi o senza un vero traguardo serve qualcosa che impari strada facendo.

10. Esercizi svolti in stile esame#

10.1 First-visit ed every-visit su un episodio (γ = 1)#

Testo. In un MDP episodico con γ=1\gamma = 1 si osserva, seguendo la policy π\pi, il seguente episodio (per ogni tt sono riportati lo stato visitato e il reward ricevuto al passo successivo):

tt StS_t Rt+1R_{t+1}
0 s1s_1 +1+1
1 s2s_2 00
2 s3s_3 2-2
3 s2s_2 +2+2
4 s3s_3 +1+1

L’episodio termina dopo T=5T = 5 passi. Stimare VπV^{\pi} per i tre stati con Monte Carlo first-visit ed every-visit.

s1+1s20s3−2s2+2s3+1Tt = 0t = 1t = 2t = 3t = 4terminaleprima visitavisita successivareward Rt+1
Svolgimento

Si calcolano i return all’indietro con la ricorsione Gt=Rt+1+γGt+1G_t = R_{t+1} + \gamma \, G_{t+1}, partendo da GT=0G_T = 0:

G4=1,G3=2+G4=3,G2=2+G3=1,G1=0+G2=1,G0=1+G1=2G_4 = 1, \qquad G_3 = 2 + G_4 = 3, \qquad G_2 = -2 + G_3 = 1, \qquad G_1 = 0 + G_2 = 1, \qquad G_0 = 1 + G_1 = 2

Visite per stato: s1s_1 al tempo 00; s2s_2 ai tempi 11 e 33; s3s_3 ai tempi 22 e 44.

First-visit (si usa solo la prima occorrenza di ogni stato):

V(s1)=G0=2,V(s2)=G1=1,V(s3)=G2=1V(s_1) = G_0 = 2, \qquad V(s_2) = G_1 = 1, \qquad V(s_3) = G_2 = 1

Every-visit (si mediano i return di tutte le occorrenze):

V(s1)=2,V(s2)=G1+G32=1+32=2,V(s3)=G2+G42=1+12=1V(s_1) = 2, \qquad V(s_2) = \frac{G_1 + G_3}{2} = \frac{1 + 3}{2} = 2, \qquad V(s_3) = \frac{G_2 + G_4}{2} = \frac{1 + 1}{2} = 1

Le due stime differiscono su s2s_2 (11 contro 22): la prima visita a s2s_2 incorpora anche il tratto di ciclo con reward negativo, la seconda no, e l’every-visit media entrambe le prospettive. Con un solo episodio nessuna delle due stime è “quella giusta”: sono entrambi stimatori legittimi che convergono allo stesso limite al crescere degli episodi.

10.2 Più episodi con discount (γ = 0,5)#

Testo. In un MDP episodico con γ=0,5\gamma = 0{,}5 si osservano, sotto la policy π\pi, due episodi:

Episodio 1: A+2B0A+4terminaleA \xrightarrow{+2} B \xrightarrow{0} A \xrightarrow{+4} \text{terminale}

Episodio 2: B+2A2terminaleB \xrightarrow{+2} A \xrightarrow{-2} \text{terminale}

(la notazione XrYX \xrightarrow{r} Y indica che dallo stato XX si riceve reward rr e si transita in YY). Stimare Vπ(A)V^{\pi}(A) e Vπ(B)V^{\pi}(B) con first-visit ed every-visit MC.

Episodio 1A+2B0A+4Tt = 0t = 1t = 2terminaleEpisodio 2B+2A−2Tt = 0t = 1terminaleγ = 0,5reward
Svolgimento

Return dell’episodio 1, all’indietro (T=3T = 3):

G2=4,G1=0+0,54=2,G0=2+0,52=3G_2 = 4, \qquad G_1 = 0 + 0{,}5 \cdot 4 = 2, \qquad G_0 = 2 + 0{,}5 \cdot 2 = 3

Le visite sono: AA ai tempi 00 e 22, BB al tempo 11. Return dell’episodio 2 (T=2T = 2):

G1=2,G0=2+0,5(2)=1G_1 = -2, \qquad G_0 = 2 + 0{,}5 \cdot (-2) = 1

con BB al tempo 00 e AA al tempo 11.

First-visit: per AA si usano G0=3G_0 = 3 (episodio 1, prima visita al tempo 00) e G1=2G_1 = -2 (episodio 2, prima e unica visita); per BB si usano G1=2G_1 = 2 (episodio 1) e G0=1G_0 = 1 (episodio 2):

V(A)=3+(2)2=0,5,V(B)=2+12=1,5V(A) = \frac{3 + (-2)}{2} = 0{,}5, \qquad V(B) = \frac{2 + 1}{2} = 1{,}5

Every-visit: per AA si aggiunge anche la seconda visita dell’episodio 1 (G2=4G_2 = 4); per BB non cambia nulla, perché non ha mai visite ripetute:

V(A)=3+4+(2)3=531,67,V(B)=2+12=1,5V(A) = \frac{3 + 4 + (-2)}{3} = \frac{5}{3} \approx 1{,}67, \qquad V(B) = \frac{2 + 1}{2} = 1{,}5

Schema operativo da esame: (1) calcolare i return all’indietro episodio per episodio con GR+γGG \leftarrow R + \gamma G; (2) elencare le visite di ogni stato distinguendo le prime dalle successive; (3) mediare i return selezionati secondo la variante richiesta. L’errore tipico da evitare è dimenticare il discount nei return intermedi o contare due volte la stessa visita nella variante first-visit.

10.3 Importance sampling: calcolo dei pesi e delle due stime#

Testo. In un MDP con due azioni per stato, la behavior policy è uniforme, b(as)=0,5b(a \mid s) = 0{,}5 per ogni aa e ss, e la target policy π\pi è deterministica. Si osservano due episodi che partono dallo stato s0s_0:

Stimare Vπ(s0)V^{\pi}(s_0) con ordinary e weighted importance sampling.

Svolgimento

Peso dell’episodio 1: ogni fattore vale π/b=1/0,5=2\pi / b = 1 / 0{,}5 = 2, e i passi sono tre:

ρ1=(10,5)3=8\rho_1 = \left( \frac{1}{0{,}5} \right)^3 = 8

Peso dell’episodio 2: il primo fattore ha numeratore π(as0)=0\pi(a \mid s_0) = 0 (azione mai scelta dalla target), quindi

ρ2=0\rho_2 = 0

Stima ordinaria (si divide per il numero di episodi, n=2n = 2):

V(s0)=ρ1G1+ρ2G22=84+022=16V(s_0) = \frac{\rho_1 G_1 + \rho_2 G_2}{2} = \frac{8 \cdot 4 + 0 \cdot 2}{2} = 16

Stima pesata (si divide per la somma dei pesi):

V(s0)=ρ1G1+ρ2G2ρ1+ρ2=32+08=4V(s_0) = \frac{\rho_1 G_1 + \rho_2 G_2}{\rho_1 + \rho_2} = \frac{32 + 0}{8} = 4

Il confronto è istruttivo. La stima pesata restituisce 44, cioè il return dell’unico episodio compatibile con la target: un valore nella scala giusta. La stima ordinaria restituisce 1616, fuori scala rispetto a qualunque return osservabile: con soli due episodi il peso 88 dell’episodio compatibile non è ancora “compensato” dai molti episodi a peso zero che la behavior produrrà in futuro (in media solo un episodio su otto segue le tre scelte di π\pi, ed è amplificato di un fattore 88: sul lungo periodo i conti tornano e lo stimatore è unbiased, ma sul breve la varianza è enorme). È la fotografia numerica del trade-off della sezione 8.3: ordinaria unbiased ma instabile, pesata leggermente biased ma subito ragionevole.

Glossario#

Termine Definizione
Model-free Famiglia di metodi che apprendono value function e policy senza conoscere la dinamica one-step p(s,rs,a)p(s', r \mid s, a), usando solo esperienza.
Metodo Monte Carlo Metodo model-free che stima i valori attesi con medie empiriche di return campionati su episodi completi; definito solo per task episodici.
Return campionato (GtG_t) Realizzazione osservata del return in un episodio concluso: Gt=Rt+1+γRt+2++γTt1RTG_t = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{T-t-1} R_T.
MC prediction Stima di VπV^{\pi} (o QπQ^{\pi}) come media dei return osservati dopo le visite a uno stato (o a una coppia stato-azione) negli episodi generati da π\pi.
First-visit MC Variante che usa, per ogni episodio, solo il return della prima visita a ogni stato; stimatore unbiased, campioni i.i.d.
Every-visit MC Variante che usa i return di tutte le visite; campioni correlati e stimatore biased a campione finito, ma consistente e più efficiente nell’uso dei dati.
Media incrementale Aggiornamento VV+1N(GV)V \leftarrow V + \frac{1}{N}(G - V) che calcola la media empirica senza memorizzare i campioni.
Learning rate costante (α\alpha) Variante VV+α(GV)V \leftarrow V + \alpha (G - V): media pesata esponenzialmente che dimentica i campioni vecchi; utile in problemi non stazionari.
Exploring starts Schema di esplorazione in cui ogni episodio parte da una coppia (S0,A0)(S_0, A_0) casuale; richiede il controllo delle condizioni iniziali (di fatto, un simulatore).
Dilemma esplorazione-sfruttamento Tensione tra seguire la policy migliore nota (exploit) e provare alternative per scoprire se esiste di meglio (explore); assente nel planning con modello.
Policy ε\varepsilon-soft Policy con π(as)ε/A(s)\pi(a \mid s) \geq \varepsilon / \vert \mathcal{A}(s)\vert per ogni azione: esplorazione garantita by design.
Policy ε\varepsilon-greedy Policy ε\varepsilon-soft che concentra la probabilità residua 1ε1 - \varepsilon sull’azione greedy argmaxaQ(s,a)\arg\max_a Q(s,a).
Teorema di ε\varepsilon-greedy improvement La policy ε\varepsilon-greedy rispetto a QπQ^{\pi} migliora (o eguaglia) qualunque policy ε\varepsilon-soft π\pi in ogni stato.
GLIE Greedy in the Limit with Infinite Exploration: ogni coppia visitata infinite volte e policy greedy al limite (es. εk=1/k\varepsilon_k = 1/k); garantisce QQQ \to Q^{*} nel MC control.
On-policy Apprendimento in cui la policy valutata coincide con quella che genera i dati; vincola a policy esplorative.
Off-policy Apprendimento in cui i dati sono generati da una behavior policy bb e si apprende una target policy π\pi diversa, anche deterministica ottima.
Behavior policy (bb) Policy, tipicamente esplorativa, usata per interagire con l’ambiente e generare i dati.
Target policy (π\pi) Policy di cui si vogliono stimare le value function nell’apprendimento off-policy.
Copertura Condizione π(as)>0b(as)>0\pi(a \mid s) > 0 \Rightarrow b(a \mid s) > 0: la behavior deve poter eseguire tutte le azioni della target.
Importance sampling Tecnica per stimare EP[X]\mathbb{E}_P[X] da campioni estratti da QQ, ripesandoli con ρ(x)=P(x)/Q(x)\rho(x) = P(x)/Q(x).
Coefficiente ρ\rho Peso di una traiettoria: ρt:T1=kπ(AkSk)/b(AkSk)\rho_{t:T-1} = \prod_k \pi(A_k \mid S_k) / b(A_k \mid S_k); le probabilità di transizione si cancellano.
Ordinary importance sampling Stima iρiGi/n\sum_i \rho_i G_i / n: unbiased ma con varianza alta, anche illimitata.
Weighted importance sampling Stima iρiGi/iρi\sum_i \rho_i G_i / \sum_i \rho_i: biased con bias che tende a zero, varianza molto più bassa.
Blackjack (esempio) Task episodico con 200 stati (somma 12-21, carta del dealer, usable ace), azioni hit/stick, reward ±1\pm 1 o 00, γ=1\gamma = 1; banco di prova di MC prediction e control.

  1. Lo pseudocodice della slide corrispondente (p. 31 del deck) accumula il return come GγWG+Rt+1G \leftarrow \gamma W G + R_{t+1} e aggiorna WW solo dopo averlo usato: in quella forma il rapporto π/b\pi/b del passo corrente non viene mai applicato al return appena registrato, e i rapporti dei passi successivi compaiono con potenze spurie. Qui si riporta la versione corretta, in cui al momento dell’uso WW vale esattamente ρt:T1\rho_{t:T-1}.↩︎

Dispensa Machine Learning · Politecnico di Milano